/*
 * @Description: element 组件
 * @Author: DHL
 * @Date: 2022-01-12 16:52:41
 * @LastEditors: DHL
 * @LastEditTime: 2023-12-18 14:19:04
 */
import type { App } from 'vue'

import { useAppStore } from '@/store/modules/app'
import useCacheData from '@/hooks/web/cacheData'
import { stringUtils } from '@/utils/stringUtils'

// vxe-table
import XEUtils from 'xe-utils'

import VxeTable from 'vxe-table'

import VxeUI from 'vxe-pc-ui'

// 导入主题变量，也可以重写主题变量
import 'vxe-table/lib/style.css'
import 'vxe-pc-ui/lib/style.css'

// 导入默认的语言
import zhCN from 'vxe-pc-ui/lib/language/zh-CN'

export function setupVxePlugins(app: App<Element>) {
  VxeUI.setI18n('zh-CN', zhCN)
  VxeUI.setLanguage('zh-CN')

  VxeUI.setConfig({
    size: useAppStore().getVxeSize, // 全局尺寸
    zIndex: 5000 // 全局 zIndex 起始值
  })

  // VxeUI
  app.use(VxeUI)

  // VxeTable
  app.use(VxeTable)
}

//////////////////////////////////////////////////
// 自定义全局的格式化处理函数
//////////////////////////////////////////////////

/**
 * 格式化字典
 */
VxeUI.formats.add('formatDict', {
  cellFormatMethod({ cellValue, column }) {
    const { getDicName } = useCacheData()
    const dicName: Nullable<string> = getDicName(column.params.dict, cellValue)
    if (stringUtils.isNotEmpty(dicName)) {
      return dicName as string
    }
    return ''
  }
})

/**
 * 格式化日期，默认 yyyy-MM-dd HH:mm:ss
 */
VxeUI.formats.add('formatDate', {
  cellFormatMethod({ cellValue }, format) {
    return XEUtils.toDateString(cellValue, format || 'yyyy-MM-dd HH:mm:ss')
  }
})

/**
 * 四舍五入金额，每隔3位逗号分隔，默认2位数
 */
VxeUI.formats.add('formatAmount', {
  cellFormatMethod({ cellValue }, digits = 2) {
    return XEUtils.commafy(Number(cellValue), { digits })
  }
})

/**
 * 格式化银行卡，默认每4位空格隔开
 */
VxeUI.formats.add('formatBankcard', {
  cellFormatMethod({ cellValue }) {
    return XEUtils.commafy(XEUtils.toValueString(cellValue), { spaceNumber: 4, separator: ' ' })
  }
})

/**
 * 四舍五入,默认两位数
 */
VxeUI.formats.add('formatFixedNumber', {
  cellFormatMethod({ cellValue }, digits = 2) {
    return XEUtils.toFixed(XEUtils.round(cellValue, digits), digits)
  }
})

/**
 * 向下舍入,默认两位数
 */
VxeUI.formats.add('formatCutNumber', {
  cellFormatMethod({ cellValue }, digits = 2) {
    return XEUtils.toFixed(XEUtils.floor(cellValue, digits), digits)
  }
})
